package com.itcast.springboot.waste_recovery.service;

import com.itcast.springboot.request.RegisterReq;
import com.itcast.springboot.response.StaffMineRes;
import com.itcast.springboot.waste_recovery.common.CommonResult;
import com.itcast.springboot.waste_recovery.domain.User;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author 小破烂
 * @since 2020-08-17
 */
public interface UserService extends IService<User> {

    /**
     * 用户注册
     */
    public Integer register(RegisterReq register, Integer roleId);

    /**
     * 用户登录
     * @param account 账户
     * @param password 密码
     * @return 登录状态
     */
    public Map<String, Object> login(String account, String password);

    /**
     * 我的
     */
    public Map<String, Object> getUserMine(Integer id);

    public User getUserById(Integer id);

    /**
     * 通过手机号或者邮箱地址获取用户信息
     * @param account 账户
     * @return 用户信息
     */
    public User findByPhoneOrEmail(String account);

    /**
     * 获取角色名和权限类型
     * @param userId
     * @return
     */
    public Map<String, Object> getRolesAndPermissionByUserId(Integer userId);

    /**
     * 获取个人信息
     * @param id
     * @return Map：封装个人信息
     */
    public Map<String, Object> getPersonalInformation(Integer id);

    /**
     * 修改用户名
     * @param username 用户名
     * @return 修改状态
     */
    public Integer updateUsername(Integer id, String username, String userEmail);

    /**
     * 绑定邮箱
     * @param userEmail 接收者
     * @param subject 邮件标题
     * @param text 邮件内容
     * @return 发送状态
     */
    public Boolean bindEmail(String userEmail, String subject, String text);

    /**
     * 身份认证
     */
    public Integer realNameAuth(Integer userId, String userRealName, String userNum);

    /**
     * 员工端：我的
     */
    public StaffMineRes getStaffMine(Integer userId);

    /**
     * 修改头像
     */
    public String updateStaffUrl(Integer userId, MultipartFile img);
}
